/**
 * 华为云VOD相关类型定义
 */

// VOD媒资信息
export interface VodAssetInfo {
  /** 媒资ID */
  assetId: string
  /** 媒资名称 */
  title: string
  /** 媒资状态 */
  status: 'CREATING' | 'FAILED' | 'CREATED' | 'PUBLISHED' | 'TRANSCODING' | 'TRANSCODE_SUCCEED' | 'TRANSCODE_FAILED'
  /** 创建时间 */
  createTime: string
  /** 更新时间 */
  updateTime: string
  /** 媒资大小（字节） */
  size?: number
  /** 时长（秒） */
  duration?: number
  /** 封面图片URL */
  coverUrl?: string
}

// OBS转存参数
export interface ObsToVodParams {
  /** OBS对象键 */
  objectKey: string
  /** 媒资标题 */
  title: string
  /** 媒资描述 */
  description?: string
  /** 分类ID */
  categoryId?: number
  /** 标签 */
  tags?: string[]
  /** 是否自动转码 */
  autoTranscode?: boolean
  /** 转码模板组名称 */
  transcodeTemplateGroupName?: string
}

// 播放地址信息
export interface PlayUrl {
  /** 播放URL */
  readonly url: string
  /** 清晰度 */
  readonly quality: string
  /** 格式 */
  readonly format: string
  /** 码率 */
  readonly bitrate?: number
  /** 分辨率 */
  readonly resolution?: string
  /** 文件大小 */
  readonly size?: number
}

// 播放信息
export interface PlayInfo {
  /** 媒资ID */
  readonly assetId: string
  /** 播放地址列表 */
  readonly playUrls: readonly PlayUrl[]
  /** 封面图片URL */
  readonly coverUrl?: string
  /** 时长 */
  readonly duration?: number
}

// VOD API响应基础结构
export interface VodApiResponse<T = any> {
  /** 响应码 */
  code?: string
  /** 响应消息 */
  message?: string
  /** 响应数据 */
  data?: T
  /** 错误码 */
  error_code?: string
  /** 错误消息 */
  error_msg?: string
}

// 转存任务状态
export interface TransferTask {
  /** 任务ID */
  taskId: string
  /** 媒资ID */
  assetId?: string
  /** 任务状态 */
  status: 'PROCESSING' | 'SUCCEED' | 'FAILED'
  /** 错误信息 */
  errorMessage?: string
  /** 创建时间 */
  createTime: string
}

// 媒资分段上传参数
export interface ChunkedUploadParams {
  /** 文件对象 */
  file: File
  /** 媒资标题 */
  title: string
  /** 媒资描述 */
  description?: string
  /** 分类ID */
  categoryId?: number
  /** 标签 */
  tags?: string[]
  /** 是否自动发布 */
  autoPublish?: boolean
  /** 转码模板组名称 */
  transcodeTemplateGroupName?: string
  /** 分段大小（字节），默认10MB */
  chunkSize?: number
  /** 进度回调 */
  onProgress?: (progress: UploadProgress) => void
}

// 上传进度信息
export interface UploadProgress {
  /** 已上传字节数 */
  uploadedBytes: number
  /** 总字节数 */
  totalBytes: number
  /** 上传百分比 */
  percentage: number
  /** 当前分段号 */
  currentChunk: number
  /** 总分段数 */
  totalChunks: number
  /** 上传阶段 */
  stage: 'creating_asset' | 'initializing' | 'uploading' | 'merging' | 'confirming' | 'completed'
}

// 创建媒资响应
export interface CreateAssetResponse {
  /** 媒资ID */
  asset_id: string
  /** 视频上传URL */
  video_upload_url: string
  /** 封面上传URL */
  cover_upload_url?: string
  /** 字幕上传URLs */
  subtitle_upload_urls?: string[]
  /** 目标信息 */
  target: {
    /** OBS桶名 */
    bucket: string
    /** 区域 */
    location: string
    /** 对象键 */
    object: string
  }
}

// 分段上传授权响应
export interface UploadAuthResponse {
  /** 签名字符串 */
  sign_str: string
}

// 分段信息
export interface ChunkUploadInfo {
  /** 分段号 */
  partNumber: number
  /** 分段数据 */
  chunk: Blob
  /** 分段MD5值 */
  md5: string
  /** 分段大小 */
  size: number
}

// 已上传分段信息
export interface UploadedPart {
  /** 分段号 */
  PartNumber: number
  /** ETag值 */
  ETag: string
  /** 分段大小 */
  Size: number
  /** 最后修改时间 */
  LastModified: string
}

// 直接上传参数
export interface DirectUploadParams {
  /** 文件对象 */
  file: File
  /** 媒资标题 */
  title: string
  /** 媒资描述 */
  description?: string
  /** 分类ID */
  categoryId?: number
  /** 标签 */
  tags?: string[]
  /** 是否自动发布 */
  autoPublish?: boolean
  /** 转码模板组名称 */
  transcodeTemplateGroupName?: string
  /** 封面类型 */
  coverType?: string
  /** 字幕信息 */
  subtitles?: Array<{
    id: number
    language: string
    type: string
    md5: string
    description: string
    name: string
  }>
  /** 缩略图配置 */
  thumbnail?: {
    type: string
    coverPosition: number
  }
  /** 审核配置 */
  review?: {
    interval: number
    politics: number
    terrorism: number
    porn: number
  }
}

// Web播放器配置
export interface PlayerConfig {
  /** 播放器容器ID */
  containerId: string
  /** 播放地址 */
  src: string
  /** 封面图片 */
  poster?: string
  /** 是否自动播放 */
  autoplay?: boolean
  /** 是否显示控制条 */
  controls?: boolean
  /** 播放器宽度 */
  width?: string | number
  /** 播放器高度 */
  height?: string | number
  /** 是否循环播放 */
  loop?: boolean
  /** 是否静音 */
  muted?: boolean
}
